#include <iostream>
#include <vector>
#include <stack>

using namespace std;

void Solution(vector<int>& v) {
	int left = 0, right = 0;
	while (right < v.size()) {
		if (v[right] != 0 && right != left) {
			swap(v[left++], v[right++]);
		}
		if (v[left] != 0)
			++left;
		if(right < v.size() && v[right] == 0 || left > right)
			++right;
	}
}

void SolutionStack(vector<int>& v) {
	stack<int> zero;
	stack<int> unzero;
	for (auto it = v.rbegin(); it != v.rend(); ++it) {
		*it == 0 ? zero.push(*it) : unzero.push(*it);
	}
	int index = 0;
	while (!unzero.empty()) {
		v[index++] = unzero.top();
		unzero.pop();
	}
	while (!zero.empty()) {
		v[index++] = zero.top();
		zero.pop();
	}
}

void test_1() {
	vector<int> v1{ 0,0,0,0,0,0,0 };
	vector<int> v2;
	vector<int> v3{ 0,0,1,2,3 };
	vector<int> v4{ 1,2,3,0,0 };
	vector<int> v5{ 0,1,0,2,0 };
	vector<int> v6{ 1,0,2,0,3 };
	vector<int> v7{ 1,2,2,3,3 };
	Solution(v1);
	for (const auto& it : v1) {
		cout << it << ' ';
	}
	cout << '\n';

	Solution(v2);
	for (const auto& it : v2) {
		cout << it << ' ';
	}
	cout << '\n';

	Solution(v3);
	for (const auto& it : v3) {
		cout << it << ' ';
	}
	cout << '\n';

	Solution(v4);
	for (const auto& it : v4) {
		cout << it << ' ';
	}
	cout << '\n';

	Solution(v5);
	for (const auto& it : v5) {
		cout << it << ' ';
	}
	cout << '\n';

	Solution(v6);
	for (const auto& it : v6) {
		cout << it << ' ';
	}
	cout << '\n';

	Solution(v7);
	for (const auto& it : v7) {
		cout << it << ' ';
	}
	cout << '\n';
}

void test_2() {
	vector<int> v1{ 0,0,0,0,0,0,0 };
	vector<int> v2;
	vector<int> v3{ 0,0,1,2,3 };
	vector<int> v4{ 1,2,3,0,0 };
	vector<int> v5{ 0,1,0,2,0 };
	vector<int> v6{ 1,0,2,0,3 };
	vector<int> v7{ 1,2,2,3,3 };
	SolutionStack(v1);
	for (const auto& it : v1) {
		cout << it << ' ';
	}
	cout << '\n';

	SolutionStack(v2);
	for (const auto& it : v2) {
		cout << it << ' ';
	}
	cout << '\n';

	SolutionStack(v3);
	for (const auto& it : v3) {
		cout << it << ' ';
	}
	cout << '\n';

	SolutionStack(v4);
	for (const auto& it : v4) {
		cout << it << ' ';
	}
	cout << '\n';

	SolutionStack(v5);
	for (const auto& it : v5) {
		cout << it << ' ';
	}
	cout << '\n';

	SolutionStack(v6);
	for (const auto& it : v6) {
		cout << it << ' ';
	}
	cout << '\n';

	SolutionStack(v7);
	for (const auto& it : v7) {
		cout << it << ' ';
	}
	cout << '\n';
}

//int main() {
//	test_1();
//	test_2();
//	return 0;
//}